package com.soulless.demo.dynamicproxy.soullessproxy.client;

import com.soulless.demo.dynamicproxy.soullessproxy.proxy.SoullessClassLoader;
import com.soulless.demo.dynamicproxy.soullessproxy.proxy.SoullessInvocationHandler;
import com.soulless.demo.dynamicproxy.soullessproxy.proxy.SoullessProxy;

import java.lang.reflect.Method;

/**
 * @author zenglei
 * @Description 功能描述
 * @date 2022/11/23 15:43
 */
public class SoullessMeipo implements SoullessInvocationHandler {

    private IPerson target;

    public IPerson getInstance(IPerson target) {
        this.target = target;
        Class<?> clazz = target.getClass();

        /**
         * 生成的动态代理会调用 com.soulless.demo.dynamicproxy.jdkproxy.JdkMeipo#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
         * 参数1为生成的动态类，参数2为对应的方法
         */
        return (IPerson) SoullessProxy.newProxyInstance(new SoullessClassLoader(), clazz.getInterfaces(), this);
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        Object result = method.invoke(this.target, args);
        after();
        return result;
    }

    private void after() {
        System.out.println("双方同意开始交往");
    }

    private void before() {
        System.out.println("我是媒婆，已经收集到你的需求，开始物色");
    }
}
